package communication;

import java.net.Socket;
import java.util.Iterator;
import java.util.Map;

import server.ServerInternals;

/**
 * Message pour la creation d'un compte
 * @author Julien Roch
 * @version 0.1
 */
public class ClientCreate extends ComCliSrv {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4841072901747053010L;
	private String username;
	private String password;
	/**
	 * Cree un compte client
	 * @param username Le nom d'utilisateur
	 * @param password le mot de passe
	 */
	public ClientCreate (String username, String password) {
		this.username = username;
		this.password = password;
	}
	/**
	 * Cree l'utilsateur
	 * Envoye une exception si le pseudo existe deja
	 *  @param internals Le modele cote serveur
	 */
	public void handleServerInternals(ServerInternals internals) {
		try{
			internals.getDatabase().createUser(username, password);
			// on envoie un message de confirmation
			
			internals.addClient(socket, username);
			// Affichage de la liste des clients
			Iterator<Map.Entry<Socket, String> > it = internals.getClients().entrySet().iterator();
			System.out.println("Nouvelle table de clients: "); /** @debug */
		    while (it.hasNext()) {
		        Map.Entry<Socket,String> pairs = (Map.Entry<Socket,String>)it.next();
		        System.out.println(pairs.getKey() + "\t\t" + pairs.getValue());
		    }
		    
		    // envoie la nouvelle liste
		    ClientListChanged c = new ClientListChanged(internals.getClients().values().toArray());
		    internals.sendDataToAllClients(c);
		    
		    internals.sendGameList();
		}catch(Exception e){
			// l'utilisateur existe deja
			internals.sendDataToClient(socket, new Error(Error.ErrorType.USER_ALREADY_EXISTS));
		}

	}

}
